프레젠터와 험블 객체

Clean Architecture - Item 23

Posted by Songi on 2019-11-09

“CleanArchitecture 23장”


험블 객체 패턴

  • 디자인 패턴
  • ( 테스트 하기 어려운 행위 \ 테스트 하기 쉬운 행위 ) 를 단위 테스트 작성자가 분리하기 쉽게 하는 방법
  • 행위를 두개의 모듈 또는 클래스로 나눔 -> 그 중 하나가 험블
  • 테스트 하기 어려운 행위를 험블 객체로 옮기고, 나머지 모듈에는 테스트 하기 쉬운 행위를 옮김

factory method pattern
factory method pattern

프레젠터와 뷰

GUI 의 경우 험블 객체 패턴을 사용하여 프레젠터와 뷰로 나눌 수 있다.

  • 험블객체
  • 테스트 어려움
  • 데이터를 GUI로 이동시키지만 직접 처리하지 않음
  • 뷰 모델의 데이터를 화면에 로드하기만 함

프레젠터

  • 테스트 하기 쉬운 객체
  • 애플리케이션으로부터 데이터를 받아 화면에 표현할 수 있는 포맷으로 만드는 것이 목적
  • 뷰는 그 데이터를 받아 화면으로 전달하는 간단한 일만 수행

테스트와 아키텍처

  • 테스트 용이성
  • 행위를 테스트 하기 쉬운 부분과 어려운 부분으로 분리하면 아키텍처 경계가 정의됨
  • 프레젠터 / 뷰

데이터베이스 게이트웨이

  • [ 유스케이스 인터랙터 / 데이터베이스 ] 사이에 위치
  • 다형적 인터페이스
  • 애플리케이션이 데이터베이스에 수행하는 생성, 조회, 갱신, 삭제와 관련된 모든 메서드 포함
  • ex) UserGateway 인터페이스 의 getLastNamesOfUsersWhoLoggedInAfter 메서드
  • 유스케이스 계층 -> 게이트웨이 인터페이스 호출
  • 게이트웨이 인터페이스 구현체는 데이터베이스 계층에 위치 - 험블 객체

데이터 매퍼

ORM

factory method pattern

  • Object Relational Mapping
  • 데이터베이스 계층에 위치
  • 게이트웨이 인터페이스와 데이터베이스 사이의 험블 객체 경계를 형성
  • ex) 하이버네이트, JPA

서비스 리스너

  • 서비스 경계를 형성하는 험블 객체 패턴

결론

각 아키텍처 경계마다 경계 가까이 숨어 있는 험블 객체 패턴을 발견할 수 있다. 모두 간단한 데이터 구조를 수반하며, 테스트 용이성에 따라 분리될 것이다. 아키텍처 경계에서 험블 객체 패턴을 사용하면 전체 시스템의 테스트 용이성을 높일 수 있다.